#!/usr/bin/env node

/**
 * 地理位置功能测试脚本
 * 使用方法: node scripts/test-location.js
 */

const axios = require('axios');

async function testLocationFeatures() {
    console.log('🚀 开始测试地理位置功能...\n');

    const baseUrl = 'http://localhost:5001/api';
    const token = 'YOUR_JWT_TOKEN'; // 请替换为实际的JWT token

    const headers = {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json'
    };

    try {
        // 1. 测试初始化地理位置数据
        console.log('📥 测试初始化地理位置数据...');
        try {
            const initResponse = await axios.post(`${baseUrl}/location/initialize`, {}, { headers });
            console.log('✅ 初始化成功:', initResponse.data.message);
        } catch (error) {
            console.log('⚠️ 初始化失败（可能已经初始化）:', error.response?.data?.message || error.message);
        }

        // 2. 测试获取省份列表
        console.log('\n🌍 测试获取省份列表...');
        try {
            const provincesResponse = await axios.get(`${baseUrl}/location/provinces`, { headers });
            console.log(`✅ 获取省份成功，共 ${provincesResponse.data.totalCount} 个省份`);
            console.log('前3个省份:', provincesResponse.data.data.slice(0, 3).map(p => p.name));
        } catch (error) {
            console.log('❌ 获取省份失败:', error.response?.data?.message || error.message);
        }

        // 3. 测试根据省份获取城市
        console.log('\n🏙️ 测试根据省份获取城市...');
        try {
            const citiesResponse = await axios.get(`${baseUrl}/location/cities/110000`, { headers });
            console.log(`✅ 获取城市成功，共 ${citiesResponse.data.totalCount} 个城市`);
            console.log('城市列表:', citiesResponse.data.data.map(c => c.name));
        } catch (error) {
            console.log('❌ 获取城市失败:', error.response?.data?.message || error.message);
        }

        // 4. 测试根据城市获取区县
        console.log('\n🏘️ 测试根据城市获取区县...');
        try {
            const districtsResponse = await axios.get(`${baseUrl}/location/districts/110100`, { headers });
            console.log(`✅ 获取区县成功，共 ${districtsResponse.data.totalCount} 个区县`);
            console.log('前5个区县:', districtsResponse.data.data.slice(0, 5).map(d => d.name));
        } catch (error) {
            console.log('❌ 获取区县失败:', error.response?.data?.message || error.message);
        }

        // 5. 测试搜索地理位置
        console.log('\n🔍 测试搜索地理位置...');
        try {
            const searchResponse = await axios.get(`${baseUrl}/location/search?keyword=北京`, { headers });
            console.log(`✅ 搜索成功，找到 ${searchResponse.data.totalCount} 个结果`);
            if (searchResponse.data.data.length > 0) {
                console.log('第一个结果:', searchResponse.data.data[0].fullAddress);
            }
        } catch (error) {
            console.log('❌ 搜索失败:', error.response?.data?.message || error.message);
        }

        // 6. 测试根据地理位置查询油价
        console.log('\n⛽ 测试根据地理位置查询油价...');
        try {
            const oilPriceResponse = await axios.post(`${baseUrl}/location/oil-price`, {
                province: '北京',
                city: '北京',
                fuelType: '95',
                includeNearby: true
            }, { headers });

            console.log('✅ 查询油价成功');
            console.log('位置信息:', oilPriceResponse.data.data.location.fullAddress);
            console.log('95号汽油价格:', oilPriceResponse.data.data.oilPrice.price95, '元/升');

            if (oilPriceResponse.data.data.nearbyPrices) {
                console.log('周边地区数量:', oilPriceResponse.data.data.nearbyPrices.length);
            }
        } catch (error) {
            console.log('❌ 查询油价失败:', error.response?.data?.message || error.message);
        }

        // 7. 测试缓存统计
        console.log('\n📊 测试缓存统计...');
        try {
            const cacheStatsResponse = await axios.get(`${baseUrl}/location/cache/stats`, { headers });
            console.log('✅ 获取缓存统计成功');
            console.log('缓存大小:', cacheStatsResponse.data.data.size);
            console.log('缓存键数量:', cacheStatsResponse.data.data.keys.length);
        } catch (error) {
            console.log('❌ 获取缓存统计失败:', error.response?.data?.message || error.message);
        }

        console.log('\n🎉 地理位置功能测试完成！');

    } catch (error) {
        console.error('\n❌ 测试过程中发生错误:', error.message);

        if (error.response) {
            console.error('响应状态:', error.response.status);
            console.error('响应数据:', error.response.data);
        }
    }
}

// 运行测试
if (require.main === module) {
    testLocationFeatures().catch(console.error);
}

module.exports = { testLocationFeatures };
